package Services;

import java.io.Serializable;
import java.util.ArrayList;

import Passager.Profil;

/**
 * Classe contenant l'ensemble des services choisis par l'utilisateur
 * @author belli
 *
 */
public class ServiceChoisis implements Serializable{
	/**
	 * Generated
	 */
	private static final long serialVersionUID = -8596557794019192752L;

	//Le prix de depart
	private double prixDepart = 0;
	
	//Definir les types de transports
	private TypeClasseTransport classeDuTransport;
	
	//Definir les types de passagers
	private Profil profilUtilisateur;
	
	//Definir les repas
	private ArrayList<Repas> repas;
	
	//Definir le type de billet
	private typeBillet billet;
	
	private int nbNuite;
	

	public ServiceChoisis(TypeClasseTransport classeDuTransport,
			Profil profilUtilisateur, ArrayList<Repas> repas,
			typeBillet billet, int nbNuite) {
	
		this.classeDuTransport = classeDuTransport;
		this.profilUtilisateur = profilUtilisateur;
		this.repas = repas;
		this.billet = billet;
		this.nbNuite = nbNuite;
	}
	
	/**
	 * Connaitre le prix total des options choisies
	 * @return
	 */
	public double getPrixServices(){
		Services sc = new Services();
		return sc.getPrix(prixDepart, classeDuTransport, profilUtilisateur, repas, billet, nbNuite);
	}
	
	/**
	 * Afficher tous les services choisis
	 */
	@Override
	public String toString(){
		String retour;
		retour = "Le prix de depart est : " + prixDepart + "\n";
		retour += "La classe du transport est : " + classeDuTransport.name()+ "\n";
		retour += "Profil utilisateur : " + profilUtilisateur.name()+ "\n";
		retour += "Nombre de repas : " + repas.size()+ "\n";
		
		int compt = 1;
		//Parcourir la liste des repas
		for (Repas rep : repas) {
			retour += "Repas "+ compt +" : " + rep.name()+ "\n";
		}

		retour += "Type de billet : " + billet.name()+ "\n";
		retour += "Nombre option couchette : " + nbNuite + "\n";
		retour += "Nombre de nuit : "+ nbNuite+ "\n";
			
		return retour;
	}
	
	public double getPrixDepart() {
		return prixDepart;
	}

	public TypeClasseTransport getClasseDuTransport() {
		return classeDuTransport;
	}

	public Profil getProfilUtilisateur() {
		return profilUtilisateur;
	}

	public ArrayList<Repas> getRepas() {
		return repas;
	}

	public typeBillet getBillet() {
		return billet;
	}

	public int getNbNuite() {
		return nbNuite;
	}
	
	@Override
	public boolean equals(Object obj) {
		ServiceChoisis servchoix = (ServiceChoisis)obj;
		
		if(!(servchoix.getPrixDepart() == this.prixDepart)){
			return false;
		}
		if(!(servchoix.classeDuTransport.equals(this.getClasseDuTransport()))){
			return false;
		}
		if(!(servchoix.getProfilUtilisateur().equals(this.getProfilUtilisateur()))){
			return false;
		}
		if(!(servchoix.getRepas().equals(this.getRepas()))){
			return false;
		}
		if(!(servchoix.getBillet().equals(this.getBillet()))){
			return false;
		}
		if(!(servchoix.getNbNuite() == this.getNbNuite())){
			return false;
		}
		
		return true;
	}

}
